﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Colonisator.Classes
{
    /// <summary>
    /// Gère la création / modification de carte, via l'assistant
    /// </summary>
    public class AssistantCarte
    {
        /// <summary>
        /// Définit le numéro de l'étape en cours
        /// </summary>
        public Int32 NoEtape { get; set; }

        /// <summary>
        /// Donne le max d'étapes possibles
        /// </summary>
        public Int32 MaxEtapes { get; set; }

        /// <summary>
        /// La carte en cours de modification
        /// </summary>
        public Carte CarteEnCours { get; set; }

        /// <summary>
        /// Etape 1 : Liste des associations types de cartes / exécutions de cartes
        /// </summary>
        public Dictionary<string, List<string>> AssociationTypesCartes { get; set; }

        /// <summary>
        /// Constructeur par défaut
        /// </summary>
        public AssistantCarte()
        {
            NoEtape = 1;
            MaxEtapes = 3;
            CarteEnCours = new Carte();

            AssociationTypesCartes = new Dictionary<string, List<string>>
            {
                { Constantes.TYPE_CARTE_AGACANTE, new List<string>{{Constantes.EXECUTION_IMMEDIATE}} },
                { Constantes.TYPE_CARTE_ATTENTAT, new List<string>{{Constantes.EXECUTION_AU_BESOIN}} },
                { Constantes.TYPE_CARTE_CHANCE, new List<string>{{Constantes.EXECUTION_IMMEDIATE}} },
                { Constantes.TYPE_CARTE_CLASSIQUE, new List<string>
                    {
                        {Constantes.EXECUTION_AU_BESOIN },
                        {Constantes.EXECUTION_HAUT_DE_PILE },
                        {Constantes.EXECUTION_IMMEDIATE },
                        {Constantes.EXECUTION_COLLECTION }
                    }
                },
                { Constantes.TYPE_CARTE_COLLECTOR, new List<string>{{Constantes.EXECUTION_COLLECTION}} },
                { Constantes.TYPE_CARTE_TAXE, new List<string>{{Constantes.EXECUTION_IMMEDIATE}} },
            };
        }

        public bool EstEtapeDisponible(Int32 noEtape)
        {
            return (noEtape <= NoEtape) || (noEtape == NoEtape + 1);
        }

        public string DonnerLibelleBoutonSuivant()
        {
            if (NoEtape == MaxEtapes)
                return "";
            else
                return "Suivant";
        }

        public string DonnerLibelleBoutonPrecedent()
        {
            if (NoEtape == 1)
                return "";
            else
                return "Précédent";
        }

        public string[] DonnerExecutionsSelonType(string unTypeCarte)
        {
            return AssociationTypesCartes.Where(x => x.Key == unTypeCarte).Select(x => x.Value).ToList().First().ToArray();
        }
    }
}
